package edu.strategy;

import java.util.ArrayList;
import java.util.List;

import robocode.AdvancedRobot;
import edu.commander.BehaviorCalculator;
import edu.strategy.single.defaults.CaligulaDefaultStrategy;
import edu.strategy.single.defaults.CrazyDefaultStrategy;
import edu.strategy.single.defaults.FloodMiniPassiveDefaultStrategy;
import edu.strategy.single.defaults.ProjectMarsDefaultStrategy;
import edu.strategy.single.defaults.SavantMicroDefaultStrategy;
import edu.strategy.single.defaults.TeancumPassiveDefaultStrategy;
import edu.strategy.single.hitbybullet.ProjectMarsHitByBullletStrategy;
import edu.strategy.single.hitbybullet.SavantMicroHitByBullletStrategy;
import edu.strategy.single.hitrobot.CrazyHitRobotStrategy;
import edu.strategy.single.hitrobot.DefectiveHitRobotStrategy;
import edu.strategy.single.hitwall.CrazyHitWall;
import edu.strategy.single.hitwall.DefectiveHitWall;
import edu.strategy.single.scanned.CaligulaFirstModScannedStrategy;
import edu.strategy.single.scanned.CaligulaSecondModScannedStrategy;
import edu.strategy.single.scanned.CrazyScannedStrategy;
import edu.strategy.single.scanned.MagestyOfColorsScannedStrategy;
import edu.strategy.single.scanned.ProjectMarsScannedStrategy;
import edu.strategy.single.scanned.SavantMicroScannedStrategy;
import edu.strategy.single.scanned.TeancumPassiveScannedStrategy;


public class FactorySingle extends Factory{
	private AdvancedRobot advancedRobot = null;
	private DataManager dataSave = null;
	private BehaviorCalculator calculator = null;
	
	protected FactorySingle(AdvancedRobot advancedRobot, BehaviorCalculator calculator){
		this.advancedRobot = advancedRobot;
		this.calculator = calculator;
	}
	@Override
	public List<Strategy> getDefault() {
		List<Strategy> list = new ArrayList<Strategy>();
		list.add(new CaligulaDefaultStrategy(advancedRobot));
		list.add(new CrazyDefaultStrategy(advancedRobot));
		list.add(new FloodMiniPassiveDefaultStrategy(advancedRobot));
		//list.add(new ProjectMarsDefaultStrategy(advancedRobot));
		list.add(new SavantMicroDefaultStrategy(advancedRobot));
		list.add(new TeancumPassiveDefaultStrategy(advancedRobot));
		return list;
	}

	@Override
	public List<Strategy> getHitByBullet() {
		List<Strategy> list = new ArrayList<Strategy>();
		//list.add(new ProjectMarsHitByBullletStrategy(advancedRobot));
		list.add(new SavantMicroHitByBullletStrategy(advancedRobot));
		return list;
	}

	@Override
	public List<Strategy> getHitRobot() {
		List<Strategy> list = new ArrayList<Strategy>();
		list.add(new CrazyHitRobotStrategy(advancedRobot));
		list.add(new DefectiveHitRobotStrategy(advancedRobot));
		return list;
	}

	@Override
	public List<Strategy> getHitWall() {
		List<Strategy> list = new ArrayList<Strategy>();
		list.add(new CrazyHitWall(advancedRobot));
		list.add(new DefectiveHitWall(advancedRobot));
		return list;
	}

	@Override
	public List<Strategy> getScanned() {
		List<Strategy> list = new ArrayList<Strategy>();
		list.add(new CaligulaFirstModScannedStrategy(advancedRobot));
		list.add(new CaligulaSecondModScannedStrategy(advancedRobot));
		list.add(new CrazyScannedStrategy(advancedRobot));
		list.add(new MagestyOfColorsScannedStrategy(advancedRobot));
		//list.add(new ProjectMarsScannedStrategy(advancedRobot));
		list.add(new SavantMicroScannedStrategy(advancedRobot));
		list.add(new TeancumPassiveScannedStrategy(advancedRobot));
		return list;
	}
	@Override
	public DataManager getDataManager() {
		if (dataSave == null){
			dataSave = new DataManager("norabot");
		}
		return dataSave;
	}

	@Override
	public BehaviorCalculator getBehaviorCalculator() {
		return calculator;
	}
}
